package br.com.mtech.ctrlliberty.web.util;

import java.text.MessageFormat;
import java.util.Locale;
import java.util.MissingResourceException;
import java.util.ResourceBundle;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;

/**
 * Esta classe implementa os recursos para internacionalizacao
 * com mensagens em arquivos de propriedade
 */
public class UtilsNLS {
	
	public static final String MSG_PROP_LOGIN	 = "br.com.mtech.ctrlliberty.nls.msgLogin";
	public static final String MSG_PROP_CADASTRO = "br.com.mtech.ctrlliberty.nls.cadastro";
	public static final String MSG_PROP_GERAL	 = "br.com.mtech.ctrlliberty.nls.msgGeral";
	
	/**
	 * Retorna o classloader corrente
	 */
	protected static ClassLoader getCurrentClassLoader(Object defaultObject){
		ClassLoader loader = Thread.currentThread().getContextClassLoader();
		if(loader == null){
				loader = defaultObject.getClass().getClassLoader();
		}
		return loader;
	}
	
	/**
	 * Retorna a mensagem com a string internacionalizada
	 *
	 * @param bundleName Nome do bundle de mensagem
	 * @param key Nome da chave de internacionalizacao
	 * @param params Parametros para classloader
	 * @param locale Locale do pais a ser pesquisado
	 * 
	 * @return Mensagem internacionalizada
	 */
	public static String getMessageResourceString(String bundleName,  String key, Object params[], Locale locale){
		String text = null;
		ResourceBundle bundle = ResourceBundle.getBundle(bundleName, locale, getCurrentClassLoader(params));
		try{
				text = bundle.getString(key);
		} catch(MissingResourceException e){
				text = "?? key " + key + " not found ??";
		}
		if(params != null){
				MessageFormat mf = new MessageFormat(text, locale);
				text = mf.format(params, new StringBuffer(), null).toString();
		}
		return text;
	}
	
	/**
	 * Preparar mensagem de erro ou advertencia para classe de view
	 * (funciona somente com aplicacao JSF)
	 *
	 * @param moduloMensagem Nome do bundle de mensagem
	 * @param mensagem Mensagem Internacionalizada
	 */
	public static void showMessage(String moduloMensagem, String mensagem) {
		FacesContext context = FacesContext.getCurrentInstance();
		String loginError = UtilsNLS.getMessageResourceString(moduloMensagem, mensagem, null, context.getViewRoot().getLocale());
		FacesMessage message = new FacesMessage(loginError);
		context.addMessage("", message);
	}

}
